package 真题;/**
 * @author： li
 * @date： 2022-02-06 16:34
 * @version 1.0
 */
/*问题描述
对于一个字符串S,我们定义S的分值f(S)为S中出现的不同的字符个数。例如 "aba"，"abc", "aaa"。
现在给定一个字符串S[0..n-1]（长度为n），请你计算对于所有S的非空子串S[i..j](0<=i<=j<n),f(S[i..j])的和是多少。
输入格式
输入一行包含一个由小写字母组成的字符串 。
输出格式
输出一个整数表示答案。
样例输入
ababc
样例输出
28
样例说明
子串  f值
a     1
ab    2
aba   2
abab  2
ababc 3
 b    1
 ba   2
 bab  2
 babc 3
  a   1
  ab  2
  abc 3
   b  1
   bc 2
    c 1
评测用例规模与约定
对于20%的评测用例，1≤n ≤10;
对于40%的评测用例，1≤ n ≤100;
对于50%的评测用例，1≤n ≤1000;
对于60%的评测用例，1≤n ≤10000;
对于所有评测用例，1≤n ≤100000。

 */
import java.util.Arrays;
import java.util.Scanner;
//试题I 子串分值和   满分
public class 子串分值和_01 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char[] arr1 = scan.nextLine().toCharArray();
        int[] arr2 = new int[26];
        long count = 0;
        int index;
        long len = arr1.length;

        Arrays.fill(arr2, -1);

        for (int i = 0; i < arr1.length; i++) {
            index = arr1[i] - 'a';
            count += (len - i) * (i - arr2[index]);
            arr2[index] = i;
        }

        System.out.println(count);
    }
}

